"""
# -*- coding: utf-8 -*-
# @Time    : 2023/5/25 8:44
# @Author  : 王摇摆
# @FileName: Data.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
import numpy as np


def createTrainDatas(W, start, end, size=10):
    """
    创建线性可分的训练数据集
    args:
        W - 目标权重系数
        start - 最小值
        end - 最大值
        size - 训练数据集大小
    return:
        X - 训练集特征值
        y - 训练集目标值
    """
    np.random.seed(42)
    X = np.random.uniform(start, end, (size, W.shape[0]))
    y = np.sign(X.dot(W))
    return X, y


def buildLine(W, start, end, size=100):
    """
    构建一条指定的二维直线
    args:
        W - 权重系数
        start - 最小值
        end - 最大值
        size - 组成线的点的数量
    return:
        x0, -
    """
    x0 = np.linspace(start, end, size)
    if W[1] == 0:
        x1 = np.zeros(100)
    else:
        x1 = -W[0] * x0 / W[1]
    return x0, x1


# 坐标轴起始点
start = -10
# 坐标轴结束点
end = 10
# 目标权重系数
W = np.array([5, 4])
# 创建线性可分的训练数据集
X, y = createTrainDatas(W, start, end)
print('感知机数据集已生成完毕！')
